const WebSocket = require("ws");

/**
 * @api {websocket} ws://localhost:3001 WebSocket连接接口
 * @apiName WebSocketConnection
 * @apiGroup WebSocket
 * @apiDescription 提供实时通信功能，支持客户端连接、消息发送和广播
 *
 * @apiProtocol ws
 * @apiHost localhost
 * @apiPort 3001
 *
 * @apiExample 连接示例:
 *   const ws = new WebSocket('ws://localhost:3001');
 *
 * @apiSuccess (连接成功) {Object} 系统消息 连接成功时返回的系统消息
 * @apiSuccessExample 成功响应:
 *   {
 *     "code": 200,
 *     "message": "系统消息-连接成功",
 *     "type": "system"
 *   }
 */
module.exports = function setupWebSocket(server) {
  const wss = new WebSocket.Server({ server });
  const clients = [];

  wss.on("connection", (ws, request) => {
    console.log("新的客户端连接");
    clients.push(ws);
    console.log("当前连接数:", clients.length);
    // 通知当前连接的客户端
    ws.send(
      JSON.stringify({
        code: 200,
        message: "系统消息-连接成功",
        type: "system",
      })
    );

    /**
     * @api {websocket-message} 接收消息 接收客户端发送的实时消息
     * @apiName ReceiveMessage
     * @apiGroup WebSocket
     * @apiDescription 接收客户端发送的实时消息，并处理响应
     *
     * @apiParam {String} message 客户端发送的消息内容
     * @apiParamExample {json} 请求示例:
     *   "用户发送的消息内容"
     *
     * @apiSuccess {String} reply 处理后的响应消息（大写形式）
     * @apiSuccessExample 成功响应:
     *   "处理后的消息内容（如大写形式）"
     */
    ws.on("message", (message) => {
      console.log("收到消息:", message.toString());
      // const reply = message.toString().toUpperCase();
      // ws.send(reply);
    });

    ws.on("close", () => {
      console.log("客户端断开连接");
      // 从客户端列表中移除断开的连接
      const index = clients.indexOf(ws);
      if (index !== -1) {
        clients.splice(index, 1);
      }
    });
  });

  // 添加广播方法
  function broadcast(message) {
    console.log("广播消息:", message);
    clients.forEach((client) => {
      if (client.readyState === WebSocket.OPEN) {
        client.send(JSON.stringify(message));
        // client.send(message);
      }
    });
  }

  return {
    wss,
    broadcast,
  };
};
